<?php
/**
 * Created by PhpStorm.
 * User: Jiang
 * Date: 2015/4/9
 * Time: 21:48
 */
header("Content-Type:text/html;charset=utf-8");
/**抽象产品角色
 * Interface IProduct   产品接口
 */
interface IProduct
{
    /**X轴旋转
     * @return mixed
     */
    function XRotate();

    /**Y轴旋转
     * @return mixed
     */
    function YRotate();
}

/**具体产品角色
 * Class XProduct        X轴旋转产品
 */
class XProduct implements IProduct
{
    private $xMax=1;
    private $yMax=1;

    function __construct($xMax,$yMax)
    {
        $this->xMax=$xMax;
        $this->yMax=1;
    }

    function XRotate()
    {
        echo "您好，我是X轴旋转产品，X轴转转转。。。。。。";
    }

    function YRotate()
    {
        echo "抱歉，我是X轴旋转产品，我没有Y轴。。。。。。";
    }
}

/**具体产品角色
 * Class YProduct        Y轴旋转产品
 */
class YProduct implements IProduct
{
    private $xMax=1;
    private $yMax=1;

    function __construct($xMax,$yMax)
    {
        $this->xMax=1;
        $this->yMax=$yMax;
    }

    function XRotate()
    {
        echo "抱歉，我是Y轴旋转产品，我没有X轴。。。。。。";
    }

    function YRotate()
    {
        echo "您好，我是Y轴旋转产品，Y轴转转转。。。。。。";
    }
}

/**具体产品角色
 * Class XYProduct        XY轴都可旋转产品
 */
class XYProduct implements IProduct
{
    private $xMax=1;
    private $yMax=1;

    function __construct($xMax,$yMax)
    {
        $this->xMax=$xMax;
        $this->yMax=$yMax;
    }

    function XRotate()
    {
        echo "您好，我是XY轴都可旋转产品，X轴转转转。。。。。。";
    }

    function YRotate()
    {
        echo "您好，我是XY轴都可旋转产品，Y轴转转转。。。。。。";
    }
}

/**工厂角色
 * Class ProductFactory
 */
class ProductFactory
{
    static function GetInstance($xMax,$yMax)
    {
        if($xMax>1 && $yMax===1)
        {
            return new XProduct($xMax,$yMax);
        }
        elseif($xMax===1 && $yMax>1)
        {
            return new YProduct($xMax,$yMax);
        }
        elseif($xMax>1 && $yMax>1)
        {
            return new XYProduct($xMax,$yMax);
        }
        else
        {
            return null;
        }
    }
}

//测试代码

$pro=array();
$pro[]=ProductFactory::GetInstance(1,12);
$pro[]=ProductFactory::GetInstance(12,1);
$pro[]=ProductFactory::GetInstance(12,12);
$pro[]=ProductFactory::GetInstance(0,12);

foreach($pro as $v)
{
    if($v)
    {
        echo "<br/>";
        $v->XRotate();
        echo "<br/>";
        $v->YRotate();
    }
    else
    {
        echo "非法产品！<br/>";
    }
    echo "<hr/>";
}
